import pygtk
import gtk.glade
import gobject
import gtk
import os, time

from dao.AlumnosDao import AlumnosDao
from dao.Alumnos_LeccionesDao import Alumnos_LeccionesDao
from dao.EscuelasDao import EscuelasDao
from sync import sync

from model.Alumnos import Alumnos
from model.Sesion import Sesion
from model.Alumnos_Lecciones import Alumnos_Lecciones


'''Ventana de confirmacion'''
class ModalDialog(gtk.Dialog):
    """Es la ventana de confirmacion del boton Responder."""
    def __init__(self, master=None):
        """Initialize a new instance."""
        gtk.Dialog.__init__(self)
        self.master = master
        self.set_modal(True)
        if self.master:
            self.set_transient_for(self.master)
            
        # Destroy
        self.connect("delete_event", self.deleteEH)
        
    def runModal(self):
        """Despliega el Dialog e inicia el evento loop."""
        self.show()
        gtk.main()

    def endModal(self, *args):
        """Terminate the modal event loop and dismiss the dialog."""
        self.hide()
        gtk.main_quit()

    def deleteEH(self, *args):
        """Event handler invoked when the dialog is deleted."""
        self.endModal()
        # The return value tells Gtk+ that the delete event has
        # been processed.  Without a return value of true, Gtk+
        # will provide the default deletion behavior:  it will destroy
        # self's visuals.
        return True



class P1_registro():
	def __init__(self, runaslib=True, padreSugar=None):
		self.idEscuelaElegida = ""
		self.runaslib = runaslib
		self.padreSugar = padreSugar
		# Se carga el .glade
		self.xml = gtk.glade.XML(padreSugar.GLADE_P1_REGISTRO)

		# Se carga el window
		self.w = self.xml.get_widget('winlogin')
		self.w.connect("delete_event", gtk.main_quit)
		
		# Cargamos el contenido de la ventana,xq el sugar ya pone la ventana
		self.w_child = self.w.get_child()
			
		self.inicializar_componentes()
		self.inicializar_cabecera()

		# self.widget se linkea con la activida
		# puede ser cualquier widget menos window..x lo q dije mas arriba
		self.widget = self.w_child

		if not runaslib:
			self.w.show_all()
			gtk.main()


	def cb_changed(self, w):
		#model, it, = w.get_selection().get_selected()
		#val = model.get_value(it, 0)
		#print 'V1 Cambiado al = *'+ str(val)+ '*'
		self.idEscuelaElegida = str(w.get_active())
		print 'V2 Cambiado al = *'+ self.idEscuelaElegida + '*'

	#Instancia los componentes graficos
	def inicializar_componentes(self):
		self.gui_idalumno = self.xml.get_widget("idalumno")
		self.gui_nombre = self.xml.get_widget("nombre")
		self.gui_apellido = self.xml.get_widget("apellido")
		#self.gui_hboxescuelas = self.xml.get_widget("hboxescuelas")
		self.gui_codescuela = self.xml.get_widget("codescuela")
		self.gui_edad = self.xml.get_widget("edad")
		self.gui_cantpersonas = self.xml.get_widget("cantpersonas")

                dic = {	"on_registrar_clicked" : self.registrar,
			"on_winlogin_destroy" : gtk.main_quit}
		self.xml.signal_autoconnect(dic)


	#Muestra el nombre y escuela del alumno
	def inicializar_cabecera(self):
		self.daoAlumno = AlumnosDao()
		self.dalAlumnoLecciones = Alumnos_LeccionesDao()
		self.daoEscuelas = EscuelasDao()
		self.ws = sync()
		serial = self.obtenerSerialXo()

		self.gui_idalumno.set_text(serial)
		self.gui_idalumno.set_editable(False)
			
		self.gui_nombre.set_text('')
		self.gui_nombre.set_editable(True)

		self.gui_apellido.set_text('')
		self.gui_apellido.set_editable(True)

		self.gui_codescuela.set_text('')
		self.gui_codescuela.set_editable(True)

		'''ls = gtk.ListStore(str, str)
		combo = gtk.ComboBox(ls)
		cell = gtk.CellRendererText()
		combo.pack_start(cell)
		combo.add_attribute(cell, 'text', 0)
		combo.connect('move-active', self.cb_changed)

		ls.clear()
		listaEscuelas = self.daoEscuelas.obtenerLista()
		for e in listaEscuelas:
			print e.nombre+"-"+e.idEscuela
			ls.append([e.nombre, e.idEscuela])

		self.gui_hboxescuelas.pack_start(combo, padding=2)'''
		#topwin.add(vbox)
		#topwin.show_all()


	def registrar(self, widget):
		#Crear Estudiante si no existe		
		serial = self.obtenerSerialXo()
		codesc = ""
		try:
		    codesc = int(self.gui_codescuela.get_text())
		except:
		    codesc = ""

		alumno = Alumnos(serial, self.gui_nombre.get_text(), self.gui_apellido.get_text(), serial, codesc, self.gui_edad.get_text(), self.gui_cantpersonas.get_text() )

		#Registro Local
		self.daoAlumno.guardar(alumno)

		#Registro en el Servidor
		r = self.ws.registrarAlumno()
		resultado = "Registro en el servidor = " + str(r)

		#Se va a la bienvenida
		#if r == 'ACTUALIZADO' or r == 'INSERTADO' :
		self.buildDialog(resultado)
 		self.padreSugar.cargarP2_bienvenida(self.padreSugar.handle)


	def obtenerSerialXo(self):
		try:
			serial_no = self.read_file('/ofw/serial-number')
		except: 
			serial_no = 'Fallo Leer Archivo'

		if serial_no == None:
			serial_no = '_not_available'
		return serial_no[:11]

	def read_file(self, path):
		if os.access(path, os.R_OK) == 0:
			return None
		fd = open(path, 'r')
		value = fd.read()
		fd.close()
		if value:
			value = value.strip('\n')
			return value
	    	else:
			#print('No information in file or directory: %s', path)
			return None


        def buildDialog(self, etiq):
		"""Build a sample modal dialog."""
		result = ModalDialog(master=self.padreSugar)
		result.set_position(gtk.WIN_POS_MOUSE)
		result.set_title("Informe.")
		result.resize(200,100)
            	
		label = gtk.Label(etiq)
            	result.vbox.pack_start(label, padding=5)
            	label.show()

            	closeBtn = gtk.Button("Cerrar")
            	closeBtn.connect("clicked", result.endModal)
		closeBtn.show()
		result.runModal()

if __name__ == '__main__':

	path = '/ofw/serial-number'
	if os.access(path, os.R_OK) == 0:
		print('No hay')

	fd = open(path, 'r')
	value = fd.read()
	fd.close()

	if value:
		value = value.strip('\n')
	else:
		print('No information in file or directory: %s', path)

	if value == None:
		value= "_not_available"
	print value[:11]
	print value

